package com.gome.boot.config.webservice.endpoint;

import com.gome.boot.common.util.JacksonUtils;
import org.apache.cxf.endpoint.Client;

/**
 * WebService客户端包装类.
 *
 * @author baoxiufeng
 */
public class WebServiceClient {

    /**
     * 实际WebService接口调用客户端工具.
     */
    private Client client;

    /**
     * 构造方法.
     *
     * @param client 实际WebService接口调用客户端工具
     */
    public WebServiceClient(Client client) {
        this.client = client;
    }

    /**
     * 调用WebService接口.
     *
     * @param methodName 接口方法名称
     * @param reqData 请求数据对象（需要转换为XML数据串）
     * @param respClazz 响应数据对象类型
     * @param <T> 响应数据对象类型泛型
     * @return 响应数据对象
     */
    public <T> T invoke(String methodName, Object reqData, Class<T> respClazz) {
        Object obj = null;
        try {
            Object[] objs = client.invoke(methodName, JacksonUtils.convertObjectToXml(reqData));
            if (objs != null && objs.length > 0) {
                obj = objs[0];
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return JacksonUtils.convertXmlToObject((String) obj, respClazz);
    }

    public Client getClient() {
        return client;
    }
}
